What is fetch-cookie?
The fetch-cookie npm package is a wrapper around the Fetch API that adds automatic handling of cookies. It allows you to manage cookies in a more convenient way when making HTTP requests, which is particularly useful for maintaining session state across multiple requests.
What are fetch-cookie's main functionalities?
Automatic Cookie Handling
This feature allows you to automatically handle cookies when making HTTP requests. The cookies are stored and sent with subsequent requests to the same domain, making it easier to manage session state.
const fetch = require('fetch-cookie/node-fetch')(require('node-fetch'));
fetch('https://example.com')
.then(res => res.text())
.then(body => console.log(body));
Custom Cookie Jar
You can use a custom cookie jar to manage cookies. This is useful if you need to share cookies between different parts of your application or if you need to persist cookies between sessions.
const fetch = require('fetch-cookie/node-fetch')(require('node-fetch'));
const tough = require('tough-cookie');
const cookieJar = new tough.CookieJar();
fetch('https://example.com', { cookieJar })
.then(res => res.text())
.then(body => console.log(body));
Integration with Node.js and Browsers
The package can be used both in Node.js and in browser environments, making it versatile for different types of applications.
const fetch = require('fetch-cookie/node-fetch')(require('node-fetch'));
fetch('https://example.com')
.then(res => res.text())
.then(body => console.log(body));
Other packages similar to fetch-cookie
axios
Axios is a promise-based HTTP client for the browser and Node.js. It supports automatic transformation of JSON data, and you can use it with the 'axios-cookiejar-support' package to handle cookies similarly to fetch-cookie.
request
Request is a simplified HTTP client for Node.js with support for many features, including cookie handling via the 'request-promise-native' package. However, it is now deprecated and not recommended for new projects.
superagent
Superagent is a small, progressive client-side HTTP request library that also works in Node.js. It supports cookies out of the box and provides a similar level of functionality for managing cookies.
fetch-cookie
![Build Status](https://travis-ci.org/valeriangalliat/fetch-cookie.svg?branch=master)
Decorator for a fetch
function to support automatic cookie storage and population.
Description
fetch-cookie
wraps arround a fetch
function and intercepts request options and response
objects to store received cookies and populate request with the appropriate cookies.
This library is developed with Node.Js and fetch polyfill libraries such as node-fetch in mind, since
the browser version is supposed to let a way to include cookies in requests.
Compatibility may not be guaranteed but as long as your library implements the Fetch Standard you should be fine.
In case of incompatibilities, please create a new issue.
Internally the plugin uses a cookie jar. You can insert your own (details below) but tough-cookie is preferred.
Usage
Basic
const nodeFetch = require('node-fetch')
const fetch = require('fetch-cookie')(nodeFetch)
Custom cookie jar
If you want to customize the internal cookie jar instance (for example, with a custom store), you can inject it as a second argument:
const nodeFetch = require('node-fetch')
const tough = require('tough-cookie')
const fetch = require('fetch-cookie')(nodeFetch, new tough.CookieJar())
This enables you to create multiple fetch-cookie
instances that use different cookie jars,
esentially two different HTTP clients with different login sessions on you backend (for example).
All calls to fetch
will store and send back cookies according to the URL.
Cookies on redirects
Details: By default, cookies are not set correctly in the edge case where a response
sets cookies and redirects to another URL. A real-life example of this behaviour
is a login page setting a session cookie and redirecting.
The reason for this limitation is that the generic fetch API does not allow any way to
hook into redirects. However, the node-fetch library does expose its own API which
we can use.
TLDR: Ff cookies during indirection turns out to be a requirement for you,
and if you are using node-fetch, then you can use the custom node-fetch decorator
provided with this library:
const nodeFetch = require('node-fetch')
const fetch = require('fetch-cookie/node-fetch')(nodeFetch)